// 封装树形数据处理
// 核心思想:  寻找父节点的过程  通过pid去匹配id  如果匹配上了当前项push到匹配项的chilren属性中
// 固定的实现步骤:
// 1.循环遍历数组  以数组中的每一项的id 作为key, 每一项本身作为value 形成一个新的对象[方便查找父节点]
// 2.遍历数组 以数组中的每一项的pid去第一步形成的对象中匹配id  如果匹配上 就代表是它的子节点 push到chilren属性中 如果匹配不到 代表它就是最外层的父节点  直接push到最终产生的树形数组中
/**
 const map = {
   '3e9':{
     code : 1,
     id:'xxx'
   },
   'eye':{
     code : 1,
     id:'xxx'
   }
 }
 */

function transTree(arr) {
  const treeArr = []
  // 逻辑处理
  // 以每一项的id作为key,自身作为value形成对象结构
  const map = {}
  arr.forEach((item) => {
    map[item.id] = item
    map[item.id].children = []
  })
  // 遍历数组通过pid去匹配id,匹配到就添加到chilren属性中,匹配不到代表自身就是最外层的父节点,添加到最终的数组中
  arr.forEach((item) => {
    if (map[item.pid]) {
      map[item.pid].children.push(item)
    } else {
      treeArr.push(item)
    }
  })
  return treeArr
}

export default transTree

